package com.opcode.costa.ui.menu.addorder;

import java.lang.ref.WeakReference;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.opcode.costa.R;
import com.opcode.nebulamobil.base.activities.FragmentActivityBase;
import com.opcode.nebulamobil.base.activities.MultiFragmentActivityBase;
import com.opcode.nebulamobil.base.components.LinearLayoutBase;
import com.opcode.nebulamobil.base.components.TextViewBase;
import com.opcode.nebulamobil.base.fragments.FragmentBase;
import com.opcode.nebulamobil.base.fragments.ResponsiveFragmentBase;
import com.opcode.nebulamobil.base.fragments.dialogfragments.RoundedProgressDialogBase;
import com.opcode.nebulamobil.information.ApplicationInfo;
import com.opcode.nebulamobil.information.dataforms.costadataforms.ActiveTableDataForm;
import com.opcode.nebulamobil.information.dataforms.costadataforms.PersonalDataForm;
import com.opcode.nebulamobil.information.dataforms.costadataforms.TableDataForm;
import com.opcode.nebulamobil.information.requests.costarequests.FoodListReq;
import com.opcode.nebulamobil.information.requests.costarequests.OrderRequest;
import com.opcode.nebulamobil.information.responses.costaresponses.FoodListResp;
import com.opcode.nebulamobil.utility.JsonConverter;
import com.opcode.nebulamobil.utility.ObjectCreator;
import com.opcode.nebulamobil.utility.STSLog;
import com.opcode.nebulamobil.utility.UniqueIdCreator;

/**
 * Bu ekrana geçildiği zaman masa bilgisi seçili olarak gelecektir. Dolayısıyla
 * bu ekran almış olduğu masa bilgisine göre ekranı düzenler ve pipeline'da bir
 * sonraki adıma geçer.
 * 
 * @author Okan ERDO�AN 16 Haz 2014
 */
public class AddOrderStepOneFragment extends ResponsiveFragmentBase{

	private View vi;

	/*
	 * Masa seçili olarak geleceği için beforeLinearLayout'un görünürlüğü Gone
	 * yapılacaktır. Yalnızca afterLinearLayout VISIBLE olacaktır.
	 * beforeLinearLayout içerisinde masa seçimi için gereken görsel öğeler
	 * bulunmaktadır.Masa seçimi yapılmayacağı için bu ekran GONE yapıldı.
	 */
	private LinearLayoutBase afterLinearlayout, beforeLinearlayout,paperEffectLayout8;

	/*
	 * Seçili olan masa bilgisinin yazacağı textview nesne referansıdır.
	 */
	private TextViewBase tableNumberTextview;

	/*
	 * Seçili olan masaya ait bilgilerin yer aldığı data form nesnesidir.
	 */
	private TableDataForm tableDataForm;

	/*
	 * Sunucuya gönderilecek olan request objectine ait nesne referansıdır.
	 */
	private OrderRequest orderRequest;
	
	private RoundedProgressDialogBase roundedProgressDialogBase;

	public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {

		/*
		 * Bu bölümde fragment'a ait görsel öğeler nesne referanslarına
		 * bağlanıyorlar.
		 */
		this.vi = inflater.inflate(R.layout.new_order_step_one_fragment_layout,container, false);

		this.beforeLinearlayout = (LinearLayoutBase) this.vi.findViewById(R.id.table_choosing_before_linearlayout);
		this.afterLinearlayout = (LinearLayoutBase) this.vi.findViewById(R.id.table_choosing_after_linearlayout);
		this.paperEffectLayout8 = (LinearLayoutBase) this.vi.findViewById(R.id.paper_effect_layout_8);
		this.tableNumberTextview = (TextViewBase) this.vi.findViewById(R.id.table_number_textview);

		/*
		 * Burada seçili olarak gelen masa bilgisi elde edilir.
		 */
		this.tableDataForm = ((ActiveTableDataForm) getActivity().getIntent().getSerializableExtra("ACTIVE_TABLE")).getTableDataForm();

		this.orderRequest = new OrderRequest();

		((FragmentActivityBase) getActivity()).createSharedPreferencesManager("sharedpreferences", getActivity());
		String personalDataFormAsJson = ((FragmentActivityBase) getActivity()).readFromSharedPreferences("personalDataForm", null);
		PersonalDataForm personalDataForm=(PersonalDataForm) JsonConverter.fromJsonString(personalDataFormAsJson,PersonalDataForm.class);
		this.orderRequest.setPersonalId(personalDataForm.getPersonelID());

		orderRequest.setTableId(tableDataForm.getTableId());
		Log.i("AddOrderStepOneFragment", orderRequest.getTableId() + " id'li masaya yeni sipariş ekleniyor.");

		/*
		 * Masa numarası bilgisi kullanıcıya gösterilemk üzere textview
		 * nesnesine veriliyor.
		 */
		this.tableNumberTextview.setText("" + tableDataForm.getTableNumber());

		/*
		 * Görsel öğelerin görünürlükleri ayarlanıyor.
		 */
		this.changeLayoutVisibility(beforeLinearlayout, afterLinearlayout, true);
		this.paperEffectLayout8.setVisibility(View.GONE);

		/*
		 * Step one fragment'a ilişkin gerekli işlemler tanımlandıktan sonra bir
		 * sonraki fragment'a geçiliyor.
		 */
		// ((FragmentActivityBase)getActivity()).pipelineForward(((FragmentActivityBase)getActivity()).getPipelineManager(),
		// (FragmentBase)ObjectCreator.createClass(AddOrderStepTwoFragment.class));

		this.roundedProgressDialogBase=new RoundedProgressDialogBase();
		
		createRequest();

		return this.vi;
	}

	public void onResume() {
		super.onResume();

		((MultiFragmentActivityBase) getActivity()).getPipelineManager().getStepList().get(0).setwFrag(new WeakReference<Fragment>(this));

		((MultiFragmentActivityBase) getActivity()).getPipelineManager().setActiveStep(((MultiFragmentActivityBase) getActivity()).getPipelineManager().getStepList().get(0));
	}

	public void createRequest() {
		((FragmentActivityBase) getActivity()).showGeneralDialog(this.roundedProgressDialogBase, "ADD_ORDER_PROGRESS_DIALOG");

		ApplicationInfo.setResponseListener(this);

		FoodListReq foodListReq = new FoodListReq();
		foodListReq.setType("FoodListReq");
		foodListReq.setRequestId(UniqueIdCreator.createUniqueID());
		ApplicationInfo.getRequestListener().jsonRequestCame(JsonConverter.toJsonString(foodListReq));
	}

	/**
	 * Bu metodun geriye döndürdü۟ değer false ise bir önceki fragment'a
	 * geçilir. Eğer metodun geri dönüş değeri true ise aynı fragment içindeki
	 * bir önceki duruma (seçim yapılmamış durum) geçilir.
	 */
	public boolean backPressed() {
		if (beforeLinearlayout.getVisibility() == View.VISIBLE) {
			return false;
		} else if (afterLinearlayout.getVisibility() == View.VISIBLE) {
			return false;
		}
		return false;

	}

	@Override
	public void responseCame(String response) {
		try {
			((FragmentActivityBase) getActivity()).closeGeneralDialog(this.roundedProgressDialogBase, "ADD_ORDER_PROGRESS_DIALOG");

			FoodListResp foodListResp = (FoodListResp) JsonConverter.fromJsonString(response, FoodListResp.class);
			((MultiFragmentActivityBase) getActivity()).pipelineForwardWithRequestObject(((MultiFragmentActivityBase) getActivity()).getPipelineManager(),(FragmentBase) ObjectCreator.createClass(AddOrderStepTwoFragment.class),orderRequest, foodListResp);
		} catch (NullPointerException exception) {
			Log.e("AddOrderStepOneFragment","Yemek Listesi alınıp bir sonraki adıma geçilirken hatayla karşılaşıldı.");
			STSLog.writeLog(exception, this.getClass().getCanonicalName(),"Yemek Listesi alınıp bir sonraki adıma geçilirken hatayla karşılaşıldı.");
		}

	}
}
